# -*- coding: utf-8  -*-
import wikipedia, re, time

excepciones_titulos = []

mes = {
    "ene": 1,
    "feb": 2,
    "mar": 3,
    "abr": 4,
    "may": 5,
    "jun": 6,
    "jul": 7,
    "ago": 8,
    "sep": 9,
    "oct": 10,
    "nov": 11,
    "dic": 12
}
i_mes = {
    1: "ene",
    2: "feb",
    3: "mar",
    4: "abr",
    5: "may",
    6: "jun",
    7: "jul",
    8: "ago",
    9: "sep",
    10: "oct",
    11: "nov",
    12: "dic"
}

base_cafe = u"Wikipedia:Café/Portal/Archivo/"
cafes = [[u"Noticias", 9, 14, 25000],
     [u"Políticas", 5, 8, 40000],
     [u"Técnica", 5, 8, 15000],
     [u"Propuestas", 5, 8, 40000],
     [u"Ayuda", 3, 4, 20000],
     [u"Miscelánea", 6, 9, 25000]]

for wop in cafes:
    cafe = wop[0]
    p = wikipedia.Page(wikipedia.getSite(),base_cafe+cafe+"/Actual")
    texto = p.get()

    if len(texto)<wop[3]:
        wikipedia.output(u'\03{lightgreen}Ignorando café %s, por tener un tamaño de %s kB.\03{default}\n' % (cafe, len(texto)/1024))
        continue
    else:
        wikipedia.output(u'  *** \03{lightgreen}%s (tamaño: %s kB)\03{default} ***' % (wop[0], len(texto)/1024))
    
    salida = texto
    it = re.finditer(u"(?us)(?P<seccion>\s==(?P<titulo>[^=]+?)==\s(?P<texto>.*?))(?=\s==[^=]+?==)",texto)
    i = 0
    
    for m in it:
        i += 1
        
        if m.group("titulo") in excepciones_titulos:# excepciones
            wikipedia.output(u'Ignorar sección ' + m.group("titulo"))
            continue

        menor = 2147483647
        mayor = 0
        ediciones = 0
        comentario = u''
        wikipedia.output(str(i)+u') \03{lightred}Título: \03{default}'+m.group('titulo'))
        it2 = re.finditer(u'(?P<hor>\d{2}):(?P<min>\d{2}) (?P<dia>\d{1,2}) (?P<mes>ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic) (?P<ano>20\d\d) \((?:CES?T|UTC)\)',m.group('texto'))
        
        for m2 in it2:
            #print m2.group("dia")+"-"+m2.group("mes")+"-"+m2.group("ano")+"  "+m2.group("hor")+":"+m2.group("min")
            epo_time = int(time.mktime((int(m2.group('ano')),int(mes[m2.group('mes')]),int(m2.group('dia')),int(m2.group('hor')),int(m2.group('min')),0,0,0,1)))
            if mayor<epo_time:
                mayor=epo_time
            if menor>epo_time:
                menor=epo_time
            
            ediciones += 1
        
        wikipedia.output(u'   \03{lightblue}PRIMER MENSAJE:\03{default} ' + str(menor) + ' - ' +time.strftime("%x-%X",time.localtime(menor)))
        wikipedia.output(u'   \03{lightblue}ÚLTIMO MENSAJE:\03{default} ' + str(mayor) + ' - ' +time.strftime("%x-%X",time.localtime(mayor)))
        
        if ediciones<wop[1]:
            dias = wop[1]
        elif ediciones>wop[2]:
            dias = wop[2]
        else:
            dias = ediciones
        
        if mayor<int(time.time())-(86400*dias) and mayor>0 and mayor<>menor:
            wikipedia.output(u'\03{lightred} ##### ARCHIVO ##### \03{default}')
            ano_seccion = time.strftime("%Y", time.localtime(menor))
            mes_seccion = time.strftime("%m", time.localtime(menor))
            ap = wikipedia.Page(wikipedia.getSite(), base_cafe+cafe+"/"+ano_seccion+"/"+mes_seccion)
            comentario = u"Archivando /*"+m.group("titulo")+u"*/ Archivado por cumplir "+str(dias)+u" días de inactividad"
            
            if ap.exists():
                tmp=ap.get()
                ap.put(tmp+"\n"+m.group("seccion"), comment='Bot: '+comentario)
            else:
                ap.put(u"{{Café frío|"+str(ano_seccion)+"|"+cafe+"}}\n"+m.group("seccion"), comment="Bot: Creando archivo nuevo. "+comentario)

            salida = salida.replace(m.group("seccion"),"")
            ap = wikipedia.Page(wikipedia.getSite(), base_cafe+cafe+"/Actual")
            ap.put(salida, comment='Bot: '+comentario)
        
        if mayor==0:
            wikipedia.output(u'  -----------------> Marca de agua')
            salida = salida.replace(m.group("seccion"),m.group("seccion")+u"\n<!-- "+time.strftime("%H:%M %d ")+i_mes[int(time.strftime("%m"))]+time.strftime(" %Y")+u" (UTC) Marca de tiempo para esta sección. NO ELIMINE ESTA LÍNEA-->\n")
            ap = wikipedia.Page(wikipedia.getSite(), base_cafe+cafe+"/Actual")
            ap.put(salida, comment=u"Bot: Añadiendo marca de tiempo")
            ap_error = wikipedia.Page(wikipedia.getSite(), u"User:Muro Bot/Errores/Café")
            ap_error.put('Error en ' + cafe + u'. ~~~~', comment=u"Bot: Nuevo error en el café")
        
    wikipedia.output('\n')
